ETTask 您所在的位置:网站首页 ET吗你是 是什么意思 ETTask

ETTask

2024-06-12 10:08| 来源: 网络整理| 查看: 265

标题: ETTask

在看ETTask前, 需要先看ETBook的2.1, 2.2, 2.3节内容. 如果你不了解异步方法, async/await, 同步上下文, 执行上下文 , 建议先去看以下文章: 异步方法: https://devblogs.microsoft.com/premier-developer/dissecting-the-async-methods-in-c/ https://devblogs.microsoft.com/premier-developer/extending-the-async-methods-in-c/ https://devblogs.microsoft.com/premier-developer/the-performance-characteristics-of-async-methods/ 同步上下文: https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/

熊猫UWA直播讲解Callback与ETTask

2022.8.10 更新 UWA官方鼓励大家一起互动看直播,不会提供录播! 官方对于上传录播是不支持的态度, 因此想要看录播视频的自己想办法哦~ ←点一下看看~ B站现有的录播及时观看哦, 指不定什么时候就没了 且看且珍惜

ETTask是什么?

增加自定义Task ETTask,ETTask不会使用同步上下文,必须保证调用跟回调都在主线程。Unity跟ETServer都是单线程逻辑,所以这一修改将大大提高性能

使用C#7,异步方法可以返回task-like的类型, 详情可以谷歌搜索关键字 task-like

ETTask是一个轻量级单线程的task,相比Task性能更强,GC更少 甚至ETTask只支持单线程 因为Task太容易被人误解,我专门搞了个完全单线程的ETTask

异步的本质就是把回调的形式变成同步的写法而已。那么什么情况要回调呢?回调有单线程回调也有多线程回调啊。这跟ettask毛线关系都没有。ettask就是把你的回调改成同步的写法而已,具体你是改单线程回调还是多线程回调都跟ettask无关

ETtask只能用unity2018.3以上版本

ETVoid是代替async void,意思是新开一个协程。ettask跟task一样。当然task不去await也相当于新开协程,但是编辑器会冒出提示,提示你await。所以新开协程最好用ETVoid。4.0用async void。使用场景,自己写写就明白啦. 协程就是回调.

熊猫: ettask还要啥教程? 要搞懂ettask 下载一个jetbrain peek工具,反编译下看下生成的代码就行了。 参考Timercomponent,看懂就全明白了 看网上的文章看十年也不会明白,自己写一下timercomponet啥都懂了

无GC ETTask

master 2021年4月29日 提交的ETTask版本

无GC ETTask,其实是利用对象池,注意,必须小心使用,不懂不要乱用

请不要随便使用ETTask的对象池,除非你完全搞懂了ETTask!!!

假如开启了池,await之后不能再操作ETTask,否则可能操作到再次从池中分配出来的ETTask,产生灾难性的后果

SetResult的时候请现将tcs置空,避免多次对同一个ETTask SetResult

大部分情况可以用objectwait代替ettask,推荐使用,绝对不会出问题

vs Task

【群主】熊猫(80081771) 2018-08-10 9:58:57 不要用任何微软提供的task创建方法,多线程会把你搞死搞残

多线程的问题没什么文章可以写的,其实很简单,你能不能保证另外的线程逻辑是线程安全的?很多人开线程开task从来不考虑这个问题,结果导致问题。说实话我写了10多年代码都不敢做这种保证,上次socket库就不小心出了个多线程的bug。我自己几乎不用多线程,假如用那也是非常非常小心的。反正记住一点,不用多线程就行了

【群主】熊猫(80081771) 2018-08-10 10:15:41 ET是单线程的,所以不会管理线程 跨线程都是把委托投递到一个队列,主线程不停从队列中取出委托执行 你看看asynctool的代码,本质上就是把委托投递到主线程

每帧取完队列中的所有委托,执行完

【码奴】戏莳(231098595) 10:29:26 现在用asnyc特别小心,await的前后都要做些检查保护

【群主】熊猫(80081771) 10:31:14 @戏莳 那到不用,async设置了同步上下文是线程安全的,只要不用task.run什么的就行了

【群主】熊猫(80081771) 2018-08-10 10:39:48 用ET不要自己去搞多线程,除非自己对线程把控力非常强

Lin 2022/8/24 11:23:34 @熊猫 群主问一下,最近在看ET框架,关于ETTask替换原来的C#的Task,ETTask是主线程异步么,如果是的话,性能方面是否没有Task开线程池性能好。我看主线程还是设置了同步上下文,这个队列只是用于网络,是否可以再开一个新的队列用于网络,其他异步逻辑用同步上下文。

熊猫 2022/8/24 11:30:40 首先要能把控得住多线程,才能谈性能。其次,et是服务端多进程,同样能利用多核。et是逻辑单线程,并不意味着只能单线程,你能把控得住,照样可以多线程,一般人是不行的

【码仙】底层拼图仔 AE(210379417) 10:28:23 async await 如果用的Task. await后面的部分是不确定在哪个线程执行的,猫大以前4.0的做法就是把上下文抛到主线程,让主线程执行. 如果用的是ETTask. await后面的部分是一定在主线程执行的. 就完全相当于写了个回调方法了. 【码仙】底层拼图仔 AE(210379417) 10:28:48 Task 实际上也是回调, 不过这个回调方法的执行原本可能不在主线程罢了.

【码圣】梦不死(77122954) 15:12:48 都说ET是单线程。但在接收网络消息的时候应该是多线程的吧?多个session同时收到消息是否同时在处理?涉及到公共数据的改变是否应该做队列处理? 【码圣】 々风恒¢(710490061) 15:13:28 网络消息接收是异步,处理是回主线程 【码圣】梦不死(77122954) 15:22:51 这里?

【码圣】 々风恒¢(710490061) 15:23:08 对的

vs UniTask



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有